package com.example.mysql.学习笔记.基础.约束;

public class 约束 {
}
/**
 * 约束(constraint)概述
 * 为什么需要约束
 * 数据完整性（Data Integrity）是指数据的精确性（Accuracy）和可靠性（Reliability）。
 * 它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
 *
 * 为了'''保证数据的完整性'''，SQL规范以约束的方式对**表数据进行额外的条件限制**。
 *  从以下四个方面考虑：
 *      - `实体完整性（Entity Integrity）`：例如，同一个表中，不能存在两条完全相同无法区分的记录
 *      - `域完整性（Domain Integrity）`：例如：年龄范围0-120，性别范围“男/女”
 *      - `引用完整性（Referential Integrity）`：例如：员工所在部门，在部门表中要能找到这个部门
 *      - `用户自定义完整性（User-defined Integrity）`：
 *          例如：用户名唯一、密码不能为空等，本部门经理的工资不得高于本部门职工的平均工资的5倍。
 *
 * 什么是约束 ：     约束是表级的强制规定。
 *
 * 可以在**创建表时规定约束（通过 CREATE TABLE 语句）**，或者在**表创建之后通过 ALTER TABLE 语句规定约束**。
 *
 * 约束的分类
 *
 * - **根据约束数据列的限制，**约束可分为：
 *   - **单列约束**：每个约束只约束一列
 *   - **多列约束**：每个约束可约束多列数据
 * - **根据约束的作用范围**，约束可分为：
 *   - **列级约束**：只能作用在一个列上，跟在列的定义后面
 *   - **表级约束**：可以作用在多个列上，不与列一起，而是单独定义
 *
 * ```
 * 			位置			支持的约束类型					是否可以起约束名
 * 列级约束：	列的后面		语法都支持，但外键没有效果		不可以
 * 表级约束：	所有列的下面	   默认和非空不支持，其他支持	   可以（主键没有效果）
 * ```
 *
 * - **根据约束起的作用**，约束可分为：
 *   - **NOT NULL** **非空约束，规定某个字段不能为空**
 *   - **UNIQUE**  **唯一约束**，**规定某个字段在整个表中是唯一的**
 *          可以有多个null
 *   - **PRIMARY KEY  主键(非空且唯一)约束**
 *   - **FOREIGN KEY**  **外键约束**
 *   - **CHECK**  **检查约束**
 *   - **DEFAULT**  **默认值约束**
 *
 * > 注意： MySQL不支持check约束，但可以使用check约束，而没有任何效果
 *
 * - 查看某个表已有的约束
 *  SELECT * FROM information_schema.TABLE_CONSTRAINTS
 *  WHERE table_name='表名字'
 *
 *  information_schema.TABLE_CONSTRAINTS  这个是mysql的约束表
 *          其中有个table_name是表的名字字段
 *
 *
 * CREATE TABLE IF NOT EXISTS 表名(
 * 字段名 数据类型 约束,
 * 字段名 数据类型,
 * 字段名 数据类型,
 * 字段名 数据类型,
 * 字段名 数据类型,
 *
 * //表级约束   CONSTRAINT 约束名字   可不要
 * CONSTRAINT 约束名字 约束(字段)
 * );
 */

/**
 * 添加约束  删除约束
 *
 * 如果添加约束的时候  之前的信息违背了约束   必须修改后才能添加
 *
 *  修改字段  数据类型一般不会修改   一般该长度，默认值啥的
 *    ALTER TABLE 表名
 *    MODIFY 字段 数据类型 约束 //
 *
 * #方式1：
 * alter table 表名称 add 约束 key(字段列表);  这种方式   删除时需要特殊方法
 *
 * #方式2：
 * alter table 表名称 modify 字段名 字段类型 约束;
 *
 */

